package everyday;

/**
 * @author 兴趣使然黄小黄
 * @version 1.0
 * @date 2023/6/14 16:39
 * 1089. 复写零
 * https://leetcode.cn/problems/duplicate-zeros/
 */
public class Solution1089 {

    // 双指针
    public void duplicateZeros(int[] arr) {
        int n = arr.length;
        int cur = 0;
        int dest = -1;
        // 先找到需要复写的最后一个数字的位置, 使用 cur 指向
        while (cur < n) {
            if (arr[cur] != 0) {
                dest += 1;
            } else {
                dest += 2;
            }
            if (dest >= n - 1)
                break;
            ++cur;
        }
        // 边界处理
        if (dest == n) {
            arr[n - 1] = 0;
            --cur;
            dest -= 2;
        }
        // 复写过程
        while (cur >= 0) {
            if (arr[cur] == 0) {
                arr[dest--] = 0;
                arr[dest--] = 0;
                --cur;
            } else {
                arr[dest--] = arr[cur--];
            }
        }
    }
}
